1. Technical Field
This disclosure concerns evaluating applications identified as implementing desired functionality. In particular, this disclosure relates to a search, navigation and visualization tool that accepts high-level processing concepts as inputs that drive a multi-layered search of an application to validate that the logic of the application actually does implement desired functionality.
2. Background Information
Software professionals widely recognize that applications often fail to implement functionality as described by the application descriptions and project summaries of the applications. Software professionals use various inadequate techniques to reduce the time, money, and other costs for validating that an application implements particular functionality. Software professionals recognize API calls as forms of abstraction for high-level processing concepts, and merely search for the existence of particular API calls to validate that the application implements a desired functionality. For example, an API call may be identified and/or described as implementing pull-down menu functionality, although the underlying logic may not actually include the logic necessary to deliver the functionality of a pull-down menu. Current logic evaluation techniques and tools require significant resources and user expertise to accurately validate that an application implements functional requirements in support of high-level processing concepts. Modern search engines do not ensure that the logic of applications identified by the search engines actually implement the functionality as described by the project summaries and documentation of the application.
Software professionals consider the mismatch between the high-level processing concepts (e.g., the intent reflected in the descriptions of applications) and low-level implementation details (e.g., API calls and actual run-time behaviour) found in application logic a fundamental technical challenge to validating that an application implements particular functionality. Software professionals intend to author meaningful descriptions of applications, in the course of depositing applications into software repositories. The mismatch between the description of an application and the actual behaviour of the application represents one example of the “vocabulary problem”, which states that no single word or phrase best describes a programming concept.
In the spiral model of software development, stakeholders describe high-level processing concepts to development teams, and together the stakeholders and development teams identify requirements in support of the high-level processing concepts. In addition, a development team builds a prototype based on the requirements, and the development team demonstrates the prototype to the stakeholders to receive feedback. Prototypes attempt to approximate the desired high-level processing concepts (e.g., features and capabilities) of the new application stakeholders desire development teams to build. The feedback from stakeholders often leads to changes to the prototype and the original requirements, as stakeholders iteratively refine their vision. In the event the stakeholders make a substantial number of changes to the requirements, the development team often discards the prototype and builds a new prototype, and another iteration of refinements repeats. Building prototypes repeatedly without reusing existing application logic costs organizations a great deal in the form of wasted project resources and time. Deploying an application without adequately evaluating and validating that the logic of the application implements desired functionality further complicates software development.
Development teams find the task of evaluating and validating that the logic of an application approximates high-level processing concepts and requirements of a software project resource intensive. In the context of application deployment, software development professionals consider such application logic as highly relevant application logic (HRAL). Many application repositories (e.g., open source repositories and source control management systems maintained by stakeholders internally) contain hundreds of thousands of different existing applications (e.g., potential highly relevant applications (HRAs)). Unfortunately, developers find it difficult to validate the logic of applications, because of the time and expense involved in searching the application, evaluating and validating that the logic of the application implements particular functionality.
The amount of intellectual effort that a developer must expend to move a software system from one stage of development to another may be considered the “cognitive distance”. For example, using current search tools, developers expend significant intellectual effort to validate that an application implements desired functionality. Many developers employ search engines that identify exact matches between keywords that are entered as part of the search query and the words found in an application. The application may include descriptions, application logic comments, program variables names, and variable types of the application. Such search engines actually increase the difficulty of validating the application, because of the poor quality of information contained in application, and the inability to reduce the cognitive distance required to validate that the logic of the application implements the desire functionality, as well as other factors. Additionally, many applications include incomplete, misleading and inaccurate descriptions of the application. Consequently, even matching keywords with words found in the application description does not guarantee that the search engine will identify application logic that actually implements desired functionality (e.g., highly relevant application logic (HRAL)).
Effective software evaluation techniques reduce the cognitive distance between the initial concept of a system (e.g., high-level processing concepts that expressly and implicitly describe the features and capabilities of an application), validating discrete requirements, and the production implementation of the application. Unfortunately, current application evaluation tools lack the ability to reduce the cognitive distance related to validating application logic to identify HRAL.
For example, an application description may indicate that an application includes an encryption feature when in fact the application uses compression as a crude form of encryption. A developer entering “encryption” (e.g., as a high-level processing concept and specific requirement) as a keyword may waste precious time to review a search engine result containing the incorrectly described logic of an application, and ultimately discard the result, because the application fails to meet the encryption requirement. The developer must locate and examine fragments of the application logic that allegedly implements encryption before determining that the application fails to meet the requirement. The developer may spend scarce project development budget resources and significant amount of time to analyze the application before determining that the application is not relevant. The developer may even observe the runtime behavior of the application to ensure that the behavior matches the high-level processing concepts desired by the stakeholders, and meets the requirements in support of the high-level processing concepts before establishing that the logic of the application qualifies as HRAL. Current evaluation tools also lack the ability to assist developers to rapidly identify requirements in support of high-level processing concepts described by stakeholders.
Some evaluation tools return code snippets (e.g., segments of application logic), however, code snippets do not give enough background or context to assist developers to rapidly evaluate and validate the logic, and such evaluation tools require developers to invest significant intellectual effort (e.g., cognitive distance) to understand the broader scope of the code snippets. Other existing approaches and tools retrieve snippets of code based on the context of the application logic that developers work on, but while these approaches and tools improve the productivity of developers, they do not return highly relevant applications logic from high-level processing concepts as inputs.
A need has long existed for a system and method that efficiently evaluates and validates application logic to identify HRAL and deployable application.